1. Field of the Invention
The invention relates to computer systems, and more particularly, to an apparatus and method for sharing buffers between bus interfaces and a computer.
2. Description of the Related Technology
Conventional personal computer systems include a processor for processing data, one or more system controllers for controlling data flow between computer buses, and one or more bus bridge circuits for controlling data flow between various bus types within the computer system. In many conventional computer systems, the processor and system controller are controlled by a first clock while the bus bridge and bus components are controlled by a second clock.
For example, an Intel Pentium Microprocessor and its corresponding system controller may be controlled by a 200 MHz clock while the bus bridge circuit may be controlled by a 33 MHz clock. Because of the difference in clock speeds between these components, many computer systems incorporate a series of buffers to manage data transfers from components from one clock domain to components in another clock domain.
In conventional computer systems, a fixed number of data buffers are integrated into the system controller and bus controllers to buffer data transfers between clock domains. For example, many system controllers include a plurality of first-in, first-out data buffers to manage data transfers to/from a Peripheral Component Interconnect (PCI) device and the processor. Similarly, a conventional system controller may employ a plurality of first-in, first-out data buffers to buffer transfers between the processor and the memory subsystem. Other buffers may be located along the memory address bus to buffer transfers from the computer main memory to devices on the PCI bus. Thus, in all, a system controller may incorporate numerous individual buffers, with each buffer being only connected to a particular source and target component.
Although this structure ensures that each data path between clock domains includes a buffer, it leads to an inefficient use of data registers within the system controller. It would be a rare occasion that every data path within a system controller should need a buffer at the same time. Thus, it would be more advantageous to provide a mechanism wherein the data path transferring the greatest amount of data is always provided with a large set of buffers while the data path transferring the smallest amount of data is provided with a minimum amount of buffers.
U.S. Pat. No. 4,158,235, to Call, et al. discloses a buffer pool system that supports bi-directional data transfers between multiple data ports. The Call, et al. buffer pool system includes a control unit and a plurality of individual buffer units wherein each buffer unit has a fixed size. However, in the Call, et al. system, a buffer full status signal indicates that all of the buffers in the buffer pool are full, but does not use a pre-allocation system to identify if particular ports are empty or full. In addition, the Call, et al. system does not allow for concurrent transfers from various components to the buffer pool because of serial arbitration through the control bus. Thus, the state of the art needs a buffer pool system with a higher degree of concurrency to handle data transfers more efficiently.
The strategy in conventional computer systems of providing dedicated buffers for each data path results from a desire to ensure that buffer space is always available for data transfer operations. However, this strategy also requires extensive buffer space for each data path so that consecutive large data transfer operations can be accommodated. Moreover, as bus architecture complexity and operational speed increases, the need for extensive buffering likewise increases. Moreover, because buffer circuits are often integrated into an application specific integrated circuit die, extensive buffering requires additional space on the die, which increases the cost considerably.
However, in practice, the simultaneous need for a plurality of data paths, each having extensive buffer space, is rare because data buffer use is often mutually exclusive. Thus, providing extensive buffer space for each input or output data path wastes a considerable amount of the provided buffer storage space. Furthermore, the wasted buffer space is cumulative since most computer systems include a plurality of interfaces for communicating with numerous peripheral and I/O devices coupled to their respective buses. To enable data transfer between high and low speed components without delaying the high speed components, computer manufacturers require cost effective methods and technologies to increase the efficiency and utilization of buffer storage space.